//
// Created by Poyyo on 2021/5/25.
//

#ifndef ALDS_GRAPHINLISTIMPL_H
#define ALDS_GRAPHINLISTIMPL_H

#include <iostream>
#include <unordered_map>
#include "Vertex.h"
#include <vector>

using std::cin, std::cout, std::endl, std::unordered_map;


/**
 * 图的邻接表
 * 邻接结点的数据结构
 */
struct Node {
    int id;
    Node *next;

    Node(int id):id(id) {
        next = nullptr;
    }
};

/**
 * 图的邻接表
 * 结点的数据结构
 */
struct VertexNode {
    Vertex vertex;
    Node* nodes;
    VertexNode(int id) {
        vertex.setId(id);
        vertex.setSelected(false);
        vertex.setValue(0);
        nodes = nullptr;
    }
};

/**
 * 图，邻接表表示
 */
class GraphInListImpl {
private:
    /**
     * 图的邻接表
     */
    unordered_map<int, VertexNode> list;
public:
    /**
     * 构造函数
     */
    GraphInListImpl();

    void ToString();

    const unordered_map<int, VertexNode> &getList() const;

    void Select(int id);

    void Visit(int id);
};


#endif //ALDS_GRAPHINLISTIMPL_H
